home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 February: Tool Chest / Dev.CD Feb 94.toast / New System Software Extensions / QuickDraw™ GX v1.0ß2 / Interfaces & Libraries / interfaces / memory routines.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-29  |  6.7 KB  |  153 lines  |  [TEXT/MPS ]

  1. /* memory manager:
  2.     public interface definition
  3.     by Cary Clark, Georgiann Delaney, Michael Fairman, Dave Good, Robert Johnson, Keith McGreggor, Oliver Steele, David Van Brink, Chris Yerga
  4.     Copyright 1987 - 1991 Apple Computer, Inc.  All rights reserved.    */
  5.  
  6. #ifndef memoryRoutinesIncludes
  7. #define memoryRoutinesIncludes
  8.  
  9.     #ifndef memoryTypesIncludes
  10.         #include "memory types.h"
  11.     #endif
  12.     #if defined(appleInternal) && !defined(debugging) && !defined(privateMemMgrIncludes) && !defined(cpuPrinter)
  13.         #include "private memMgr.h"
  14.     #endif
  15.     #ifndef mathTypesIncludes
  16.         #include "math types.h"
  17.     #endif
  18.  
  19.     #ifdef appleInternal
  20.         #if defined(insideLoader) || defined(insideDispatcher)
  21.             #define backpatchMemoryManager
  22.         #else
  23.             #define GXInlineCode(x)
  24.         #endif
  25.     #endif
  26.     #ifndef GXInlineCode
  27.         #ifdef backpatchMemoryManager
  28.             #define GXInlineCode(x)   = {0x303C, 0x0800 + (x), 0xA832}
  29.         #else
  30.             #define GXInlineCode(x)   = {0x7000 + (x), 0xA832}
  31.         #endif
  32.     #endif
  33.  
  34.     #ifdef __cplusplus
  35.     extern "C" {
  36.     #endif
  37.  
  38.     gxHeap *GetCurrentHeap(void) GXInlineCode(0);
  39.     void SetCurrentHeap(const gxHeap *newHeap) GXInlineCode(1);
  40.  
  41.     long GetMinimumHeapSize(void) GXInlineCode(2);
  42.  
  43.     gxHeap *GetFirstHeap(void) GXInlineCode(62);
  44.     gxHeap *GetNextHeap(gxHeap *thisHeap) GXInlineCode(63);
  45.  
  46.     gxHeap *NewHeap(void *memory, long size) GXInlineCode(4);
  47.     long GetHeapSize(const gxHeap *source) GXInlineCode(7);
  48.     long GetHeapFreeSpace(const gxHeap *source) GXInlineCode(66);
  49.     void *CompactHeap(gxHeap *target, void *address) GXInlineCode(8);
  50.     void *GetHeapBlock(gxHeap *source, long types, long index) GXInlineCode(9);
  51.     void DisposeHeap(gxHeap *target) GXInlineCode(10);
  52.  
  53.     void *GetFirstHeapSection(const gxHeap *source, long *length) GXInlineCode(64);
  54.     void *GetNextHeapSection(const gxHeap *source, const void *oldSection, long *length) GXInlineCode(65);
  55.     void GrowHeap(gxHeap *target, void *newMemory, long size) GXInlineCode(5);
  56.     boolean ShrinkHeap(gxHeap *target, void *sectionStart, long sectionLength) GXInlineCode(6);
  57.  
  58.     void *NewDirectBlock(long size) GXInlineCode(11);
  59.     long GetDirectBlockSize(const void *block) GXInlineCode(12);
  60.     void *SetDirectBlockSize(void *block, long newSize) GXInlineCode(13);
  61.     long DisposeDirectBlock(void *block) GXInlineCode(14);
  62.  
  63.     void *NewWeakBlock(long size) GXInlineCode(15);
  64.     void *NewFailBlock(long size) GXInlineCode(16);
  65.     void *SetFailBlockSize(void *block, long newSize) GXInlineCode(60);
  66.  
  67.     void *NewIndirectBlock(long size) GXInlineCode(17);
  68.     long GetIndirectBlockSize(const void *block) GXInlineCode(18);
  69.     void *SetIndirectBlockSize(void *block, long newSize) GXInlineCode(19);
  70.     void *RecoverIndirectBlock(const void *block) GXInlineCode(20);
  71.     long ReleaseIndirectBlock(void *object) GXInlineCode(61);
  72.     long DisposeIndirectBlock(void *block) GXInlineCode(21);
  73.     void ExchangeIndirectBlocks(void *block1, void *block2) GXInlineCode(22);
  74.     boolean IsMasterPointer(const void *source) GXInlineCode(23);
  75.  
  76. #if defined(appleInternal) && !defined(debugging)   
  77.     #define GetBlockBusy(x)     ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->busyCount
  78.     #define GetBlockFlags(x)        ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->flags
  79.     #define GetBlockParent(x)   ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->parent
  80.     #define GetBlockType(x)     ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->typeID
  81.  
  82.     #define xSetBlockBusy(x, y) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->busyCount = y
  83.     #define SetBlockFlags(x, y) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->flags = y
  84.     #define SetBlockParent(x, y)    ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->parent = y
  85.     #define SetBlockType(x, y)  ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->typeID = y
  86.  
  87.     #define GetBlockDelta(x)        ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->delta
  88.     #define GetBlockPhysicalSize(x) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->size
  89.  
  90.     #define IncrementBlockBusy(x) ++((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->busyCount
  91.     #define DecrementBlockBusy(x) --((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->busyCount
  92. #else
  93.     long GetBlockBusy(const void *block) GXInlineCode(24);
  94.     long GetBlockFlags(const void *block) GXInlineCode(25);
  95.     void *GetBlockParent(const void *block) GXInlineCode(26);
  96.     long GetBlockType(const void *block) GXInlineCode(27);
  97.     
  98. #ifdef appleInternal
  99.     void xSetBlockBusy(void *block, long busyCount) GXInlineCode(28);
  100. #else
  101.     void SetBlockBusy(void *block, long busyCount) GXInlineCode(28);
  102. #endif
  103.     void SetBlockFlags(void *block, long newFlags) GXInlineCode(29);
  104.     void SetBlockParent(void *block, void *parent) GXInlineCode(30);
  105.     void SetBlockType(void *block, long newTypeID) GXInlineCode(31);
  106.  
  107.     long GetBlockDelta(const void *block) GXInlineCode(32);
  108.     long GetBlockPhysicalSize(const void *block) GXInlineCode(33);
  109.  
  110.     void IncrementBlockBusy(void *block) GXInlineCode(34);
  111.     void DecrementBlockBusy(void *block) GXInlineCode(35);
  112. #endif
  113.  
  114.     void *NewTemporaryBlock(long size) GXInlineCode(36);
  115.     void DisposeTemporaryBlock(void *block) GXInlineCode(37);
  116.  
  117.     long GetBlockBytes(const void *block, long index, long count, void *destination) GXInlineCode(39);
  118.     void *SetBlockBytes(void *block, long index, long oldCount, long newCount, const void *source)  GXInlineCode(40);
  119.  
  120.     gxHeap *FindHeap(const void *address) GXInlineCode(41);
  121.     void *FindBlock(const void *address) GXInlineCode(42);
  122.  
  123.     void MoveBytes(const void *source, void *destination, long length) GXInlineCode(43);
  124.     void CopyBytes(const void *source, void *destination, long length) GXInlineCode(44);
  125.     void FillBytes(void *destination, long length, long pattern) GXInlineCode(45);
  126.     boolean EqualBytes(const void *address1, const void *address2, long length) GXInlineCode(46);
  127.  
  128.     void MoveBits(const void *src, long srcInset, void *dst, long dstInset, long length) GXInlineCode(47);
  129.     void FillBits(void *dst, long dstInset, long length, long pattern) GXInlineCode(48);
  130.  
  131.     void InitializeMemoryManager(void) GXInlineCode(58);
  132.  
  133. #ifdef appleInternal
  134.     gxHeap **GetFirstHeapPtr(void) GXInlineCode(59);
  135.     gxHeap **GetFirstHeapPartPtr(void) GXInlineCode(69);
  136.  
  137.     /* IMPORTANT: don’t add any functions after this except for GetMemoryTrapAddress */
  138.     #ifdef insideStartup
  139.         #undef GXInlineCode
  140.         #define GXInlineCode(x)   = {0x7000 + (x), 0xA832}
  141.     #endif
  142. #endif
  143.  
  144.     void *GetMemoryTrapAddress(long selector) GXInlineCode(57);
  145.  
  146.     #ifdef __cplusplus
  147.     }
  148.     #endif
  149.  
  150.     #undef  GXInlineCode
  151.  
  152. #endif
  153.